#!/bin/bash
# Laravel Vue Admin 项目安装脚本 (Linux/Mac)
# 自动完成项目初始化，包括数据库迁移和种子数据填充

FORCE=false
SKIP_MIGRATIONS=false

# 解析参数
while [[ $# -gt 0 ]]; do
    case $1 in
        --force)
            FORCE=true
            shift
            ;;
        --skip-migrations)
            SKIP_MIGRATIONS=true
            shift
            ;;
        *)
            echo "未知参数: $1"
            exit 1
            ;;
    esac
done

echo "================================================"
echo "  Laravel Vue Admin 项目安装脚本"
echo "================================================"
echo ""

# 1. 检查 PHP
echo "[1/9] 检查 PHP 环境..."
if ! command -v php &> /dev/null; then
    echo "[错误] PHP 未找到"
    echo "请确保 PHP >= 8.1 已安装并添加到 PATH 环境变量"
    exit 1
fi
PHP_VERSION=$(php -v | head -n 1)
echo "[成功] $PHP_VERSION"

# 2. 检查 Composer
echo "[2/9] 检查 Composer..."
if ! command -v composer &> /dev/null; then
    echo "[错误] Composer 未找到"
    echo "请安装 Composer: https://getcomposer.org/"
    exit 1
fi
COMPOSER_VERSION=$(composer --version | head -n 1)
echo "[成功] $COMPOSER_VERSION"

# 3. 检查 Laravel 应用
echo "[3/9] 检查 Laravel 应用..."
if [ ! -f "artisan" ]; then
    echo "[错误] 未找到 artisan 文件"
    echo "请确保在 backend 目录下运行此脚本"
    exit 1
fi
echo "[成功] Laravel 应用找到"

# 4. 检查并创建 .env 文件
echo "[4/9] 检查环境配置文件..."
if [ ! -f ".env" ]; then
    if [ -f ".env.example" ]; then
        echo "[警告] .env 文件不存在，正在从 .env.example 创建..."
        cp .env.example .env
        echo "[成功] .env 文件已创建"
        echo "[警告] 请编辑 .env 文件，配置数据库连接信息！"
    else
        echo "[错误] .env.example 文件不存在"
        exit 1
    fi
else
    echo "[成功] .env 文件存在"
fi

# 5. 安装 Composer 依赖
echo "[5/9] 安装 Composer 依赖..."
composer install --no-interaction --quiet
if [ $? -ne 0 ]; then
    echo "[错误] Composer 依赖安装失败"
    exit 1
fi
echo "[成功] Composer 依赖安装完成"

# 6. 生成 APP_KEY
echo "[6/9] 检查并生成 APP_KEY..."
if ! grep -q "APP_KEY=base64:" .env 2>/dev/null; then
    echo "[警告] APP_KEY 未设置，正在生成..."
    php artisan key:generate --force > /dev/null 2>&1
    echo "[成功] APP_KEY 已生成"
else
    echo "[成功] APP_KEY 已设置"
fi

# 7. 生成 JWT 密钥
echo "[7/9] 检查并生成 JWT 密钥..."
if ! grep -q "JWT_SECRET=" .env 2>/dev/null; then
    echo "[警告] JWT_SECRET 未设置，正在生成..."
    php artisan jwt:secret --force > /dev/null 2>&1
    echo "[成功] JWT_SECRET 已生成"
else
    echo "[成功] JWT_SECRET 已设置"
fi

# 8. 清理缓存
echo "[8/9] 清理缓存..."
php artisan config:clear > /dev/null 2>&1
php artisan cache:clear > /dev/null 2>&1
php artisan route:clear > /dev/null 2>&1
php artisan view:clear > /dev/null 2>&1
echo "[成功] 缓存已清理"

# 9. 数据库迁移和种子
echo "[9/9] 数据库迁移和种子数据..."

if [ "$SKIP_MIGRATIONS" = true ]; then
    echo "[警告] 跳过数据库迁移"
else
    # 检查数据库配置
    if ! grep -q "DB_DATABASE=" .env 2>/dev/null; then
        echo "[错误] 数据库配置不完整"
        echo "请编辑 .env 文件，配置数据库连接信息"
        exit 1
    fi

    # 测试数据库连接
    echo "  测试数据库连接..."
    if php artisan db:show > /dev/null 2>&1; then
        echo "  [成功] 数据库连接成功"
    else
        echo "[错误] 数据库连接失败"
        echo "请检查 .env 文件中的数据库配置"
        echo "数据库配置示例："
        echo "  DB_CONNECTION=mysql"
        echo "  DB_HOST=127.0.0.1"
        echo "  DB_PORT=3306"
        echo "  DB_DATABASE=laravel_vue_admin"
        echo "  DB_USERNAME=root"
        echo "  DB_PASSWORD=your_password"
        exit 1
    fi

    # 运行数据库迁移
    if [ "$FORCE" = true ]; then
        echo "  [警告] 强制重置数据库（将删除所有数据）..."
        read -p "  确定要继续吗？(yes/no): " confirm
        if [ "$confirm" != "yes" ]; then
            echo "  已取消"
            exit 0
        fi
        echo "  正在重置数据库..."
        php artisan migrate:fresh --force > /dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "[错误] 数据库迁移失败"
            exit 1
        fi
        echo "  [成功] 数据库已重置"
    else
        echo "  正在运行数据库迁移..."
        php artisan migrate --force > /dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "[错误] 数据库迁移失败"
            echo "提示: 如果表已存在，可以使用 --force 参数重置数据库"
            exit 1
        fi
        echo "  [成功] 数据库迁移完成"
    fi

    # 运行数据库种子
    echo "  正在填充初始数据（管理员账号、角色、权限、菜单）..."
    php artisan db:seed --force --class=DatabaseSeeder > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "[错误] 数据库种子失败"
        exit 1
    fi
    echo "  [成功] 初始数据填充完成"
fi

echo ""
echo "================================================"
echo "  安装完成！"
echo "================================================"
echo ""
echo "默认管理员账号："
echo "  用户名: admin"
echo "  密码: admin123"
echo ""
echo "[警告] 首次登录后请立即修改管理员密码！"
echo ""
echo "下一步："
echo "  1. 启动后端服务器: php artisan serve"
echo "  2. 启动前端服务器: cd ../frontend && npm install && npm run dev"
echo "  3. 访问前端地址: http://localhost:5173"
echo ""

